<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>array</title>
</head>
<body>

    <p>111111111</p>
    <p>222222</p>
    <div><p>111111111</p></div>
<script>
    //1.---------------------------------------------------------------------------------------------------------------------------------Array.from
  /*  let arrayLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    };

    // ES5的写法
    var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
    console.log("arr1--"+arr1);
    // ES6的写法
    let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
    console.log("arr2--"+arr2);*/


    //实际应用中，常见的类似数组的对象是DOM操作返回的NodeList集合，以及函数内部的arguments对象。Array.from都可以将它们转为真正的数组。
    // NodeList对象
   /* let ps = document.querySelectorAll('p');
    Array.from(ps).forEach(function (p) {
        console.log(p);
    });*/

    //只要是部署了Iterator接口的数据结构，Array.from都能将其转化为数组
  /*  var hello=Array.from('hello');
    console.log("hello-->"+hello);

    let namesSet = new Set(['a', 'b'])
    Array.from(namesSet) // ['a', 'b']

    console.log("Array.from(namesSet)-->"+Array.from(namesSet));*/

    //对于还没有部署该方法的浏览器，可以用Array.prototype.slice方法替代。
 /*   const toArray = (() =>
                    Array.from ? Array.from : obj => [].slice.call(obj)
    )();
*/

   /* Array.from(arrayLike, x => x * x);
    // 等同于
    Array.from(arrayLike).map(x => x * x);

    Array.from([1, 2, 3], (x) => x * x)
    // [1, 4, 9]*/


    //2.---------------------------------------------------------------------------------------------------------------------------------Array.of

    //3.数组实例的copyWithin
            // 将3号位复制到0号位
            [1, 2, 3, 4, 5].copyWithin(0, 3, 4)// [4, 2, 3, 4, 5]

// -2相当于3号位，-1相当于4号位
            [1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]

// 将3号位复制到0号位
            [].copyWithin.call({length: 5, 3: 1}, 0, 3);
    // {0: 1, 3: 1, length: 5}

    // 将2号位到数组结束，复制到0号位
    var i32a = new Int32Array([1, 2, 3, 4, 5]);
    i32a.copyWithin(0, 2);
    // Int32Array [3, 4, 5, 4, 5]

    // 对于没有部署TypedArray的copyWithin方法的平台
    // 需要采用下面的写法
    [].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
    // Int32Array [4, 2, 3, 4, 5]










</script>

</body>
</html>